From 9b660e230a2d9074b8814d979bba27f03d9be12d Mon Sep 17 00:00:00 2001 From: "Signed-off-by: Shriram Rajagopalan" Date: Mon, 27 Jun 2011 15:18:38 +0100 Subject: [PATCH] remus: handle exceptions while installing/unstalling net buffer Signed-off-by: Shriram Rajagopalan Acked-by: Ian Jackson Committed-by: Ian Jackson --- tools/python/xen/remus/device.py | 32 ++++++++++++++++++++++++-------- tools/python/xen/remus/util.py | 6 ++++-- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/tools/python/xen/remus/device.py b/tools/python/xen/remus/device.py index 9e4dafa9df..debfaedb07 100644 --- a/tools/python/xen/remus/device.py +++ b/tools/python/xen/remus/device.py @@ -169,15 +169,25 @@ class IFBBuffer(Netbuf): self.vif = vif # voodoo from http://www.linuxfoundation.org/collaborate/workgroups/networking/ifb#Typical_Usage util.runcmd('ip link set %s up' % self.devname) - util.runcmd('tc qdisc add dev %s ingress' % vif.dev) + try: + util.runcmd('tc qdisc add dev %s ingress' % vif.dev) + except util.PipeException, e: + # check if error indicates that ingress qdisc + # already exists on the vif. If so, ignore it. + ignoreme = 'RTNETLINK answers: File exists' + if ignoreme in str(e): + pass + else: + raise e util.runcmd('tc filter add dev %s parent ffff: proto ip pref 10 ' 'u32 match u32 0 0 action mirred egress redirect ' 'dev %s' % (vif.dev, self.devname)) def uninstall(self): - util.runcmd('tc filter del dev %s parent ffff: proto ip pref 10 u32' \ - % self.vif.dev) - util.runcmd('tc qdisc del dev %s ingress' % self.vif.dev) + try: + util.runcmd('tc qdisc del dev %s ingress' % self.vif.dev) + except util.PipeException, e: + pass util.runcmd('ip link set %s down' % self.devname) class IMQBuffer(Netbuf): @@ -373,9 +383,15 @@ class BufferedNIC(CheckpointedDevice): def uninstall(self): if self.installed: - req = qdisc.delrequest(self.bufdevno, self.handle) - self.rth.talk(req.pack()) + try: + req = qdisc.delrequest(self.bufdevno, self.handle) + self.rth.talk(req.pack()) + except IOError, e: + pass self.installed = False - self.bufdev.uninstall() - self.pool.put(self.bufdev) + try: + self.bufdev.uninstall() + except util.PipeException, e: + pass + self.pool.put(self.bufdev) diff --git a/tools/python/xen/remus/util.py b/tools/python/xen/remus/util.py index 4ebb39ff45..b75052c6e1 100644 --- a/tools/python/xen/remus/util.py +++ b/tools/python/xen/remus/util.py @@ -65,8 +65,10 @@ def runcmd(args, cwd=None): proc.wait() if proc.returncode: print ' '.join(args) - print stderr.strip() - raise PipeException('%s failed' % args[0], proc.returncode) + errmsg = stderr.strip() + print errmsg + raise PipeException('%s failed (errmsg: %s)' % (args[0], errmsg), + proc.returncode) return stdout except (OSError, IOError), inst: raise PipeException('could not run %s' % args[0], inst.errno) -- 2.30.2